#include "head.h"

// 主菜单 - 登录注册界面
const wchar_t *title_login = L"翱翔智驭管理系统";
const wchar_t *option_login[] = {L"登陆系统", L"注册用户", L"找回密码", L"退出系统"};

// 菜单信息 -管理员菜单界面
const wchar_t *title_root = L"管理员菜单";
const wchar_t *option_root[] =
    {
        L"设定航班",
        L"修改航班",
        L"用户管理",
        L"个人中心",
        L"退出登录"};

// 菜单信息 -用户菜单界面
const wchar_t *title_user = L"用户菜单";
const wchar_t *option_user[] =
    {
        L"订票退票",
        L"余额充值",
        L"查看航班",
        L"个人中心",
        L"我的订单",
        L"退出登录"};


// 管理员 - 用户管理界面
const wchar_t *title_user_manager = L"用户管理";
const wchar_t *option_user_manager[] = {L"注销用户", L"添加超级用户", L"修改用户信息", L"返回主菜单"};

// 航班预定退订
const wchar_t *title_flight_ticket = L"机票预退中心";
const wchar_t *option_flight_ticket[] = {L"预定机票", L"退订机票", L"返回菜单"};

// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = init_double_link_list(); // 航班信息
    Flight_sys.ADMIN_USER = init_u_list();            // 管理员账户信息
    Flight_sys.REGULAR_USER = init_u_list();          // 普通用户信息
    Flight_sys.SILVER_USER = init_u_list();           // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = init_u_list();             // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = init_u_list();         // 白金会员信息 (7折)
    Flight_sys.FLIGHT_TICKET = Init_Sql_List();       // 用户订单信息初始化
    // 从文件中导入数据
    flight_data_file_scanf(Flight_sys.Flight_list);                // 航班信息
    user_data_file_scanf(Flight_sys.ADMIN_USER, ADMIN_FILE);       // 管理员账户信息文件
    user_data_file_scanf(Flight_sys.REGULAR_USER, REGULAR_FILE);   // 普通用户信息文件
    user_data_file_scanf(Flight_sys.SILVER_USER, SILVER_FILE);     // 银卡会员信息文件 (9折)
    user_data_file_scanf(Flight_sys.GOLD_USER, GOLD_FILE);         // 金卡会员信息文件 (8折)
    user_data_file_scanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE); // 白金会员信息文件 (7折)
    ticket_data_file_scanf(Flight_sys.FLIGHT_TICKET);
    system("clear");
    return Flight_sys;
}

// 系统登录
user_data Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
    u_list *list = init_u_list();
    list = merge_link_lists(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = merge_link_lists(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = merge_link_lists(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = merge_link_lists(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = merge_link_lists(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
   

    // 开始登录
    user_data log_data = u_login(list);
    // 释放
    // free(list);
    // list = NULL;
    return log_data;
}

//系统登录注册主界面
void System_Login()
{
  // 初始化操作
  FlightSystem Flight_Sys = Sys_init();
  int flag = display_menu(title_login, option_login, 4);
  // 登录系统
  if (1 == flag)
    {
        // 进入登陆操作
        user_data u_data = Sys_log_in(Flight_Sys);
        // 进入菜单
        Sys_menu(Flight_Sys.Flight_list, u_data, Flight_Sys.FLIGHT_TICKET);
        return;
    }
    //注册用户并登录系统
    else if (2==flag)
    {
        // 清屏
        system("clear");
        //新用户注册
        user_data u_data = u_register();
        // 初始化操作
        FlightSystem Flight_Sys = Sys_init();
        // 进入登陆操作
        u_data = Sys_log_in(Flight_Sys);
        // 进入菜单
        Sys_menu(Flight_Sys.Flight_list, u_data, Flight_Sys.FLIGHT_TICKET);
        return;
    }
    // 找回密码后并重新登录系统
    else if (3 == flag)
    {
        // 用户信息合表
        u_list *list = init_u_list();
        list = merge_link_lists(list, Flight_Sys.ADMIN_USER);    // 管理员账户信息文件
        list = merge_link_lists(list, Flight_Sys.REGULAR_USER);  // 普通用户信息文件
        list = merge_link_lists(list, Flight_Sys.SILVER_USER);   // 银卡会员信息文件 (9折)
        list = merge_link_lists(list, Flight_Sys.GOLD_USER);     // 金卡会员信息文件 (8折)
        list = merge_link_lists(list, Flight_Sys.PLATINUM_USER); // 白金会员信息文件 (7折)
        //  找回密码
        find_u_node_phone(list);
        // 重新进入登陆操作
        user_data log_data = u_login(list);
        // 进入菜单
        Sys_menu(Flight_Sys.Flight_list, log_data, Flight_Sys.FLIGHT_TICKET);
        // free(list);
        return;
    }
    else
    {
        system("clear");
        play_bgm(EXT);
        text_center("                你已成功退出系统!欢迎下次登录!\n", YELLOW);
        puts("");
        sleep(1);
        // 停止并释放音乐
        Mix_HaltMusic();
        Mix_CloseAudio();
        //释放链表空间
        free_double_link_list(&Flight_Sys.Flight_list);
        Destroy_Sql_List(&Flight_Sys.FLIGHT_TICKET);
        exit(-1);
    }
}

// 系统菜单
void Sys_menu(f_list *Flight_list, user_data log_data,Sql_list *ticket_list)
{
    // 分支
    int flag = 0;
    while (1)
    {
        switch (log_data.level)
        {
        case 1:
            // 管理员功能界面
            flag = display_menu(title_root, option_root, 5);
            break;
        default:
            // 普通用户功能界面
            flag = display_menu(title_user, option_user, 6) + 5;
            break;
        }

        // 菜单选项分支处理
        switch (flag)
        {
        case 1:
            // 管理员 - 设定航班
            set_flight(Flight_list);
            quit();
            break;
        case 2:
            // 管理员 - 修改航班
            modify_flight(Flight_list);
            quit();
            break;
        case 3:
            // 管理员 - 用户管理
            flag = display_menu(title_user_manager, option_user_manager, 4);
            switch (flag)
            {
            case 1:
                // 注销用户
                delete_users();
                quit();
                break;
            case 2:
                // 添加超级用户
                add_admin();
                quit();
                break;
            case 3:
                // 修改用户信息
                Modify_U();
                quit();
                break;
            default:
                break;
            }
            break;
        case 4:
            // 管理员 - 个人中心
            admin_center(log_data);
            quit();
            break;
        case 5:
            //退出登录
            System_Login();
            quit();
            break;
        case 6:
            // 用户 - 购票退票
            flag = display_menu(title_flight_ticket, option_flight_ticket, 3);
            switch (flag)
            {   
            case 1 :
                // 预定机票
                buy_ticket(Flight_list, ticket_list,log_data);
                quit();
                break;
            case 2 :
                // 退订机票
                refund_ticket(ticket_list, Flight_list, log_data);
                quit();
                break;
            default:
                break;
            }
            break;
        case 7:
            // 用户 - 余额充值
            add_money(log_data);
            quit();
            break;
        case 8:
            // 用户 - 查看航班
            view_flight_info(Flight_list, 1);
            quit();
            break;
        case 9:
            // 用户 - 个人中心
            user_center(log_data);
            quit();
            break;
        case 10:
            // 用户 - 我的订单
            user_order_tickets(ticket_list, log_data.name);
            quit();
            break;
        default:
            // 退出登录
            System_Login();
            break;
        }
    }
}


